const path = require('path')

const Koa = require('koa')
const KoaBody = require('koa-body')
const parameter = require('koa-parameter')
const KoaStatic = require('koa-static')
const cors = require('koa2-cors');

const router = require('../router')
const errorHandle = require('./errorHandle')

const app = new Koa()

app.use(
    cors({
        origin: function (ctx) { //设置允许来自指定域名请求
            if (ctx.url === '/test') {
                return '*'; // 允许来自所有域名请求
            }
            return 'http://localhost:8080'; //只允许http://localhost:8080这个域名的请求
        },
        maxAge: 5, //指定本次预检请求的有效期，单位为秒。
        credentials: true, //是否允许发送Cookie
        allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH'], //设置所允许的HTTP请求方法'
        allowHeaders: ['Content-Type', 'Authorization', 'Accept'], //设置服务器支持的所有头信息字段
        exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'] //设置获取其他自定义字段
    })
);
app.use(KoaBody({
    multipart: true,
    formidable: {
        // 配置上传路径时不推荐使用相对路径
        // 在这个配置项里面的相对路径不是相对当前文件，是相对 process.cwd()
        // process.cwd()是package.json所在的目录
        // 上传成功后koabody会自动把文件信息放在ctx.request.files中
        uploadDir: path.join(__dirname, '../upload'),
        // 保留文件后缀名
        keepExtensions: true
    },
    parsedMethods: ['POST', 'PUT', 'PATCH', 'DELETE', 'GET'],
}))
app.use(parameter(app))
app.use(KoaStatic(path.join(__dirname, '../upload')))
app.use(router.routes()).use(router.allowedMethods())
app.on('error', errorHandle)

module.exports = app